package com.engc.common.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;


public interface BaseDao {
	/**
	 * 保存一条记录
	 * 
	 * @param tableName
	 *            表名
	 * @param pojo
	 *            实体类
	 * @return
	 */
	public int Insert(String tableName, Object pojo)throws Exception;

	/**
	 * 保存一条记录
	 * 
	 * @param tableName
	 *            表名
	 * @param pojo
	 *            实体类
	 * @param column
	 *            需要保存的列
	 * @return
	 */
	public int Insert(String tableName, Object pojo, String... column)throws Exception;

	/**
	 * 保存一条Record 记录
	 * 
	 * @param tableName
	 *            表名
	 * @param record
	 *            一条Record 记录
	 * @return
	 */
	public int Insert(String tableName, Map<String,Object> record)throws Exception;

	/**
	 * 保存数据
	 * 
	 * @param sql
	 *            SQL语句
	 * @param parameter
	 *            参数
	 * @return
	 */
	public int Insert(String sql, Object... parameter) throws Exception;

	/**
	 * 修改一条记录
	 * 
	 * @param tableName
	 *            表名
	 * @param pojo
	 * @return
	 */
	public int Update(String tableName, Object pojo, String where,Object... parameter) throws Exception;

	/**
	 * 修改一条记录
	 * 
	 * @param tableName
	 * @param pojo
	 * @param column
	 * @return
	 */
	public int Update(String tableName, Object pojo, String where,
			String[] column,Object... parameter) throws Exception;

	/**
	 * 修改一条记录
	 * 
	 * @param tableName
	 *            表名
	 * @param record
	 *            Record
	 * @return
	 */
	public int Update(String tableName, Map<String,Object> record, String where ,Object...parameter) throws Exception;

	/**
	 * 更新记录
	 * 
	 * @param sql
	 *            SQL语句
	 * @param parameter
	 *            参数
	 * @return
	 */
	public int Update(String sql, Object... parameter) throws Exception;

	/**
	 * 删除记录
	 * 
	 * @param table
	 *            表名
	 * @param where
	 *            where 条件
	 * @param parameter
	 *            参数
	 * @return
	 */
	public int Delete(String table, String where, Object... parameter) throws Exception;

	/**
	 * 删除记录
	 * 
	 * @param sql
	 *            SQL语句
	 * @param parameter
	 *            参数
	 * @return
	 */
	public int Delete(String sql, Object... parameter) throws Exception;

	/**
	 * 查询一个Record
	 * 
	 * @param sql
	 *            SQL语句
	 * @param parameter
	 *            参数
	 * @return
	 */
	public Map<String,Object> Read(String sql, Object... parameter);

	/**
	 * 查询一个Bean
	 * 
	 * @param clazz
	 *            Bean 类型
	 * @param sql
	 *            SQL语句
	 * @param parameter
	 *            参数
	 * @return
	 */
	public <T> T Read(Class<T> clazz, String sql, Object... parameter);

	/**
	 * 查询多条记录
	 * 
	 * @param sql
	 * @param parameter
	 * @return
	 */
	public List<Map<String,Object>> Query(String sql, Object... parameter);

	/**
	 * 查询
	 * 
	 * @param clazz
	 * @param sql
	 * @param parameter
	 * @return
	 */
	public <T> List<T> Query(Class<T> clazz, String sql, Object... parameter);

	/**
	 * Oracle 分页查询
	 * 
	 * @param beanClass
	 * @param sql
	 * @param page
	 * @param pagesize
	 * @param params
	 * @return
	 */
	public <T> List<T> Query_SliceOracle(Class<T> beanClass, String sql,
			int page, int pagesize, Object... params);

	/**
	 * MySQL 分页查询
	 * 
	 * @param beanClass
	 * @param sql
	 * @param page
	 * @param pagesize
	 * @param pars
	 * @return
	 */
	public <T> List<T> Query_SliceMySql(Class<T> beanClass, String sql,
			int page, int pagesize, Object... pars);

	/**
	 * Oracle 分页查询
	 * 
	 * @param sql
	 *            SQL语句
	 * @param page
	 *            第多少页
	 * @param pagesize
	 *            每页大小
	 * @param parameter
	 *            参数
	 * @return
	 */
	public List<Map<String,Object>> Query_SliceOracle(String sql, int page, int pagesize,
			Object... parameter);

	/**
	 * MySQL 分页查询
	 * 
	 * @param sql
	 *            SQL语句
	 * @param page
	 *            第多少页
	 * @param pagesize
	 *            每页大小
	 * @param parameter
	 *            参数
	 * @return
	 */
	public List<Map<String,Object>> Query_SliceMySql(String sql, int page, int pagesize,
			Object... parameter);

	/**
	 * 从缓存中读取
	 * 
	 * @param cacheName
	 *            Cache名称
	 * @param key
	 *            缓存Key
	 * @param sql
	 *            SQL语句
	 * @param params
	 *            参数
	 * @return
	 */
	public Map<String,Object> Read_Cache(String cacheName, Serializable key, String sql,
			Object... params);

	/**
	 * 从缓存中读取Bean
	 * 
	 * @param beanClass
	 *            Bean类
	 * @param cacheName
	 *            Cache名称
	 * @param key
	 *            缓存Key
	 * @param sql
	 *            SQL语句
	 * @param params
	 *            参数
	 * @return
	 */
	public <T> T Read_Cache(Class<T> beanClass, String cacheName,
			Serializable key, String sql, Object... params);

	/**
	 * 从缓存中读取List
	 * 
	 * @param cacheName
	 *            Cache名称
	 * @param key
	 *            缓存Key
	 * @param sql
	 *            SQL语句
	 * @param params
	 *            参数
	 * @return
	 */
	public List<Map<String,Object>> Query_Cache(String cacheName, Serializable key,
			String sql, Object... params);

	/**
	 * 从缓存中查询
	 * 
	 * @param beanClass Bean 类
	 * @param cacheName Cache名称
	 * @param key        缓存Key
	 * @param sql       Sql语句
	 * @param params    参数
	 * @return
	 */
	public <T> List<T> Query_Cache(Class<T> beanClass, String cacheName,
			Serializable key, String sql, Object... params);

	/**
	 * 执行DML语句
	 * 
	 * @param sql
	 * @param pars
	 * @return
	 * @throws Exception
	 */
	public int execute(String sql, Object... pars) throws Exception;

	/**
	 * 获取总记录数 
	 * @param tableName 表名
	 * @param sWhere   Where 条件
	 * @param params   参数
	 * @return
	 */
	public  int getTotal(String tableName,String sWhere , Object... params);
	
	/**
	 * 获取总记录数
	 * @param sql   SQL语句
	 * @param parameter  参数
	 * @return
	 */
	public int getTotal(String sql,Object...parameter);
	
	
	
	public  int executeCountSql(String sql , Object... parameter);
	
	/**
	 * 查询Sequence 最大值
	 * @param seqName
	 * @return
	 */
	public String getSeqValue(String seqName);
	
	
	
}
